import { useEffect, useRef, useState } from 'react';
import schedulerService, { TASK_TYPES } from '../services/schedulerService';
import configService from '../services/configService';

// 这个组件用于初始化全局定时器服务
// 它不渲染任何UI元素，只在应用启动时初始化服务
const SchedulerInitializer = ({ handleSendMessage }) => {
  // 使用useRef存储最新的handleSendMessage函数引用
  const handleSendMessageRef = useRef(handleSendMessage);
  const [initialized, setInitialized] = useState(false);
  
  // 当handleSendMessage变化时更新ref
  useEffect(() => {
    handleSendMessageRef.current = handleSendMessage;
  }, [handleSendMessage]); // 当handleSendMessage变化时更新ref
  
  // 初始化定时器服务的effect，使用空依赖数组确保只执行一次
  useEffect(() => {
    // 初始化定时器服务
    const initScheduler = async () => {
      try {
        // 初始化配置服务
        await configService.initialize();
        
        // 检查是否应该加载定时器
        const schedulerConfig = configService.getConfig('scheduler');
        const shouldLoad = schedulerConfig?.enabled || false;
        const cacheSettings = schedulerConfig?.cacheSettings || true;
        
        // 如果不应该加载定时器且不缓存设置，则直接返回
        if (!shouldLoad && !cacheSettings) {
          console.log('定时器未启用且不缓存设置，跳过初始化');
          return;
        }
        
        // 标记为已初始化
        setInitialized(true);
        // 注册群发消息任务处理函数
        schedulerService.registerTaskHandler(TASK_TYPES.MASS_MESSAGE, async (task) => {
          console.log('执行群发消息任务:', task.id);
          
          let successCount = 0;
          let failCount = 0;
          
          // 为每个接收者发送消息
          for (const contact of task.recipients) {
            try {
              // 为每个联系人创建消息对象
              const messageObj = {
                id: Date.now() + Math.floor(Math.random() * 1000), // 确保ID唯一
                content: task.message,
                msgType: task.msgType, // 文本消息
                timestamp: new Date().toISOString(),
                status: 'pending'
              };
              const base64Image = task.msgType===3?task.message:null;
              // 调用ChatRoom组件的handleSendMessage方法，使用ref中的最新引用
              await handleSendMessageRef.current(messageObj, base64Image, false, contact.id);
              successCount++;
            } catch (error) {
              console.error(`向联系人 ${contact.name} 发送消息失败:`, error);
              failCount++;
            }
          }
          
          console.log(`群发消息任务 ${task.id} 执行完成，成功: ${successCount}, 失败: ${failCount}`);
          return { successCount, failCount };
        });
        
        // 注册朋友圈发布任务处理函数（示例，实际功能需要根据需求实现）
        schedulerService.registerTaskHandler(TASK_TYPES.TIMELINE_POST, (task) => {
          console.log('执行朋友圈发布任务:', task.id);
          // 这里实现朋友圈发布逻辑
          // ...
          return { success: true };
        });
        
        // 初始化服务（加载已有任务并开始定时检查）
        await schedulerService.initialize();
        
        console.log('全局定时器服务初始化完成');
      } catch (error) {
        console.error('初始化全局定时器服务失败:', error);
      }
    };
    
    initScheduler();
    
    // 组件卸载时停止定时器服务
    return () => {
      schedulerService.stopChecking();
    };
  }, []); // 空依赖数组确保只执行一次
  
  // 不渲染任何内容
  return null;
};

export default SchedulerInitializer;